///////////////////////////////////////////////////////////////////////////////
// File:        SqlDatabase.hpp
// Author:      671643387@qq.com
// Description: 
///////////////////////////////////////////////////////////////////////////////

#if !defined(SHARED_DATABASE_SQLDATABASE_HPP_)
#define SHARED_DATABASE_SQLDATABASE_HPP_

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif

#include <cassert>
#include <cstdarg>
#include "Log.hpp"
#include "database/SqlField.hpp"
#include "database/SqlConnection.hpp"
#include "database/SqlResultSet.hpp"

#if defined(__WINDOWS__)
#pragma warning(disable:4996)
#endif

///////////////////////////////////////////////////////////////////////////////
template<typename T>
class SqlDatabase
{
private:
    ///////////////////////////////////////////////////////////////////////////
    const static int MAX_QUERY_LEN = 32 * 1024;

public:
    ///////////////////////////////////////////////////////////////////////////
    SqlDatabase(void);
    ~SqlDatabase(void);

public:
    ///////////////////////////////////////////////////////////////////////////
    bool Initialize(const std::string& info);
    void Close(void);

    ///////////////////////////////////////////////////////////////////////////
    void EscapeString(std::string& s);

    ///////////////////////////////////////////////////////////////////////////
    SqlResultSetPtr PQuery(std::string sql, ...);
    bool PExecute(std::string sql, ...);

private:
    SqlConnectionPtr myconn_;
};

#include "database/SqlDatabase.inl"

#include "database/MysqlConnection.hpp"
typedef SqlDatabase<MysqlConnection>  MysqlDatabase;

#endif //SHARED_DATABASE_SQLDATABASE_HPP_
